1. Field of the Invention
Embodiments of the invention generally relate to managing access to shared resources on a computer system. More specifically, embodiments of the invention relate to techniques for managing thread access to objects in a file system on a multi-node computer system.
2. Description of the Related Art
Computer systems typically include a memory for storing programs and one or more processors which execute programs stored in the memory. Typically, an operating system may be configured to schedule and execute multiple threads as separate units of execution. In a multithreaded computing environment, each thread may access resources, including files stored in a file system.
NUMA (short for non-uniform memory access) refers to a computing architecture for a cluster of processors. Computer systems configured using NUMA architectures include multiple processing nodes, where each node includes one or more processors and local memory resources. Typically, NUMA systems are configured as “tightly-coupled,” “share everything” systems where the nodes are managed by a single operating system and may access each others memory over a common bus. That is, a processor in one node may access memory in another. Nevertheless, in such architectures, it is faster for a processor to reference the memory local to that node. Thus, poor nodal affinity for data in memory results in poor performance, i.e., when a thread executing on one node frequently accesses data in memory on another node, system performance suffers.
A general solution to this problem is to assign each thread to a home node (i.e., create a nodal “affinity” for each thread). Nodal affinity causes the system to allocate the thread's memory pages from the home node, if possible. A thread dispatcher, in turn, preferentially dispatches the thread for execution on its assigned home node. This increases the probability that memory references for the thread will be local (i.e., within the home node).